home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
modula2
/
module
/
bitblt.mod
< prev
next >
Wrap
Text File
|
1995-11-25
|
4KB
|
115 lines
IMPLEMENTATION MODULE BitBlt;
FROM SYSTEM IMPORT ADDRESS,ADR,VAL;
FROM VDIInquires IMPORT ExtendedInquire;
FROM GEMVDIBase IMPORT VDIWorkInType,VDIWorkOutType,BigPxyArrayType;
FROM AES IMPORT GrafHandle;
FROM Storage IMPORT ALLOCATE,DEALLOCATE;
FROM VDIRasters IMPORT CopyRasterOpaque,MFDBType,MFDBptr;
FROM GEMAESBase IMPORT AESIntOut;
PROCEDURE MemSize(W,H:CARDINAL; VAR Planes,wWidth :CARDINAL):CARDINAL;
VAR CW,CH,BW,BH,
handle : INTEGER;
WorkOut : VDIWorkOutType;
BEGIN
handle:=GrafHandle(CW,CH,BW,BH);
ExtendedInquire(handle,1,WorkOut);
Planes:=WorkOut[4];
IF Planes= 0 THEN HALT; END(*IF*);
wWidth:=(W DIV 16)+(W MOD 16);
RETURN( wWidth*2*H*Planes);
END MemSize;
PROCEDURE CopyMemToScreen(x,y,w,h: INTEGER; buf: ADDRESS;DeAlloc :BOOLEAN );
VAR CW,CH,BW,BH,
handle : INTEGER;
XYWH : BigPxyArrayType;
ScreenMFDB,MemoryMFDB : MFDBType;
Size : CARDINAL;
BitPlanes, WBreite : CARDINAL;
BEGIN
XYWH[0]:=0; XYWH[1]:=0; XYWH[2]:=w; XYWH[3]:=h;
XYWH[4]:=x;XYWH[5]:=y;
XYWH[6]:=x+w;XYWH[7]:=y+h;
handle:=GrafHandle(CW,CH,BW,BH);
Size:= MemSize(w,h,BitPlanes,WBreite);
ScreenMFDB.pointer:=0D;
ScreenMFDB.width:=w;
ScreenMFDB.widthW:=WBreite;
ScreenMFDB.height:=h;
ScreenMFDB.format:=1;
ScreenMFDB.planes:=BitPlanes;
ScreenMFDB.rsrvd1:=0;
ScreenMFDB.rsrvd2:=0;
MemoryMFDB.pointer:=buf+(buf MOD 16D);
MemoryMFDB.width:=w;
MemoryMFDB.widthW:=WBreite;
MemoryMFDB.height:=h;
MemoryMFDB.format:=1;
MemoryMFDB.planes:=BitPlanes;
MemoryMFDB.rsrvd1:=0;
MemoryMFDB.rsrvd2:=0;
CopyRasterOpaque(handle,3,XYWH,ADR(MemoryMFDB),ADR(ScreenMFDB));
IF DeAlloc THEN DEALLOCATE(buf); END(*IF*);
END CopyMemToScreen;
PROCEDURE CopyScreenToMem(x,y,w,h: INTEGER; VAR buf:ADDRESS);
VAR CW,CH,BW,BH,
handle : INTEGER;
XYWH : BigPxyArrayType;
ScreenMFDB,MemoryMFDB : MFDBType;
BitPlanes, WBreite : CARDINAL;
BEGIN
ALLOCATE(buf, MemSize(w,h,BitPlanes,WBreite));
IF buf#NIL THEN
handle:=GrafHandle(CW,CH,BW,BH);
ScreenMFDB.pointer:=0D;
ScreenMFDB.width:=w;
ScreenMFDB.widthW:=WBreite;
ScreenMFDB.height:=h;
ScreenMFDB.format:=1;
ScreenMFDB.planes:=BitPlanes;
ScreenMFDB.rsrvd1:=0;
ScreenMFDB.rsrvd2:=0;
XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=x+w; XYWH[3]:=y+h;
XYWH[4]:=0;XYWH[5]:=0; XYWH[6]:=w;XYWH[7]:=h;
MemoryMFDB.pointer:=buf+(buf MOD 16D);
MemoryMFDB.width:=w;
MemoryMFDB.widthW:=WBreite;
MemoryMFDB.height:=h;
MemoryMFDB.format:=1;
MemoryMFDB.planes:=BitPlanes;
MemoryMFDB.rsrvd1:=0;
MemoryMFDB.rsrvd2:=0;
CopyRasterOpaque(handle,3,XYWH,ADR(ScreenMFDB),ADR(MemoryMFDB));
END(*IF*);
END CopyScreenToMem;
PROCEDURE CopyScreenToScreen(x,y,w,h,xDest,yDest :INTEGER);
VAR CW,CH,BW,BH,Handle : INTEGER;
XYWH : BigPxyArrayType;
Screen1MFDB,Screen2MFDB : MFDBType;
BEGIN
Handle:=GrafHandle(CW,CH,BW,BH);
Screen1MFDB.pointer:=0D;
Screen1MFDB.width:=w;
Screen1MFDB.height:=h;
Screen1MFDB.format:=1;
Screen1MFDB.rsrvd1:=0; Screen1MFDB.rsrvd2:=0;
XYWH[0]:=x; XYWH[1]:=y; XYWH[2]:=w+x; XYWH[3]:=h+y;
XYWH[4]:=xDest;XYWH[5]:=yDest; XYWH[6]:=w+xDest;XYWH[7]:=h+yDest;
Screen2MFDB.pointer:=0D;
Screen2MFDB.width:=w;
Screen2MFDB.height:=h;
Screen2MFDB.format:=1;
Screen2MFDB.rsrvd1:=0; Screen2MFDB.rsrvd2:=0;
CopyRasterOpaque(Handle,3,XYWH,ADR(Screen1MFDB),ADR(Screen2MFDB));
END CopyScreenToScreen;
END BitBlt.